home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 4 / Apprentice-Release4.iso / Source Code / Libraries / C Internet Config / IC Component Source ƒ / IC Component.c < prev    next >
Encoding:
Text File  |  1995-12-06  |  18.5 KB  |  453 lines  |  [TEXT/SPM ]

  1.     
  2.     if (err==noErr){
  3.         err=ICRGetPref(&((*globals)->inst),key,attr,buf,size);
  4.     }
  5.     
  6.     err2=ICCIReleaseInside(globals,force_info);
  7.     
  8.     if (err==noErr)
  9.         err=err2;
  10.     
  11.     return err;
  12. }
  13.  
  14. pascal ICError ICCISetPref(GlobalsHandle globals,StringPtr key,ICAttr attr,Ptr buf,long size){
  15.     ICError err,err2;
  16.     Boolean force_info;
  17.     
  18.     err=ICCIForceInside(globals,icReadWritePerm,&force_info);
  19.     if (err==noErr)
  20.         err=ICRSetPref(&((*globals)->inst),key,attr,buf,size);
  21.     
  22.     err2=ICCIReleaseInside(globals,force_info);
  23.     
  24.     if (err==noErr)
  25.         err=err2;
  26.     
  27.     return err;
  28. }
  29.  
  30. pascal ICError ICCIFindPrefHandle(GlobalsHandle globals,StringPtr key,ICAttr* attr,Handle prefh){
  31.     ICError err,err2;
  32.     long prefsize;
  33.     Boolean force_info;
  34.     
  35.     err=noErr;
  36.     if (prefh==(Handle)0)
  37.         err=paramErr;
  38.     
  39.     prefsize=0L;
  40.     
  41.     if (err==noErr){
  42.         err=ICCIForceInside(globals,icReadOnlyPerm,&force_info);
  43.         if (err==noErr)
  44.             err=ICCGetPref((*globals)->current_target,key,attr,nil,&prefsize);
  45.         
  46.         if (err==noErr){
  47.             SetHandleSize(prefh,prefsize);
  48.             err=MemError();
  49.         }
  50.         
  51.         if (err==noErr){
  52.             HLock(prefh);
  53.             err=ICCGetPref((*globals)->current_target,key,attr,*prefh,&prefsize);
  54.             HUnlock(prefh);
  55.         }
  56.         
  57.         err2=ICCIReleaseInside(globals,force_info);
  58.         
  59.         if (err==noErr)
  60.             err=err2;
  61.     }
  62.     
  63.     if ((prefh!=(Handle)0)&&(err!=noErr)){
  64.         SetHandleSize(prefh,0);
  65.     }
  66.     
  67.     return err;
  68. }
  69.  
  70. pascal ICError ICCIGetPrefHandle(GlobalsHandle globals,StringPtr key,ICAttr* attr,Handle* prefh){
  71.     ICError err;
  72.     
  73.     *prefh=NewHandle(0);
  74.     if (*prefh==(Handle)0)
  75.         return MemError();
  76.     
  77.     err=ICCIFindPrefHandle(globals,key,attr,*prefh);
  78.     
  79.     if (err==icPrefNotFoundErr){
  80.         SetHandleSize(*prefh,0);
  81.         *attr=(ICAttr)0;
  82.         err=noErr;
  83.     }
  84.     
  85.     return err;
  86. }
  87.  
  88. pascal ICError ICCISetPrefHandle(GlobalsHandle globals,StringPtr key,ICAttr attr,Handle prefh){
  89.     SignedByte s;
  90.     ICError err=noErr;
  91.     
  92.     if (prefh!=(Handle)0){
  93.         if (*prefh==(Ptr)0)
  94.             err=paramErr;
  95.         if (err==noErr){
  96.             s=HGetState(prefh);
  97.             HLock(prefh);
  98.             err=ICCSetPref((*globals)->current_target,key,attr,*prefh,GetHandleSize(prefh));
  99.             HSetState(prefh,s);
  100.         }
  101.     } else {
  102.         err=ICCSetPref((*globals)->current_target,key,attr,(Ptr)0,0);
  103.     }
  104.     
  105.     return err;
  106. }
  107.  
  108. pascal ICError ICCIDefaultFileName(GlobalsHandle globals,StringPtr name){
  109.     ICError err;
  110.     short refnum;
  111.     StringHandle strh;
  112.     Str255 s;
  113.     
  114.     err=GetStringFromResourceFile(globals,kICdefault_file_name_ID,s);
  115.     
  116.     if (err!=noErr)
  117.         PasStrCopy(kICDefaultFileName,name);
  118.     else
  119.         PasStrCopy(s,name);
  120.     
  121.     return err;
  122. }
  123.  
  124. pascal ICError ICCILaunchURL(GlobalsHandle globals,StringPtr hint,Ptr data,long len,long* selStart,long* selEnd){
  125.     ICError err;
  126.     Handle urlh;
  127.     ICAppSpec helper;
  128.     Str255 scheme;
  129.     long junk_attr;
  130.     long size;
  131.     
  132.     urlh=NewHandle(0);
  133.     if (urlh==(Handle)0){
  134.         return MemError();
  135.     }
  136.     
  137.     err=ICCParseURL((*globals)->current_target,hint,data,len,selStart,selEnd,urlh);
  138.     
  139.     if (err==noErr){
  140.         err=FindScheme(urlh,scheme);
  141.     }
  142.     
  143.     if (err==noErr){
  144.         Str255 conscheme;
  145.         Ptr spos;
  146.         
  147.         PasStrCopy(kICHelper,conscheme);
  148.         spos=(Ptr)(&(conscheme[conscheme[0]+1]));
  149.         
  150.         BlockMoveData((Ptr)(&(scheme[1])),spos,scheme[0]);
  151.         conscheme[0]+=scheme[0];
  152.         
  153.         size=sizeof(helper);
  154.         err=ICCGetPref((*globals)->current_target,conscheme,&junk_attr,(Ptr)(&helper),&size);
  155.     }
  156.     
  157.     if (err==noErr){
  158.         err=LaunchURL(helper.fCreator,urlh);
  159.     }
  160.     
  161.     if (urlh!=(Handle)0){
  162.         DisposeHandle(urlh);
  163.     }
  164.     
  165.     return err;
  166. }
  167.  
  168. pascal ICError ICCIMapFilename(GlobalsHandle globals,StringPtr filename,ICMapEntry* entry){
  169.     ICError err;
  170.     Handle entries;
  171.     ICAttr junk_attr;
  172.     
  173.     err=(ICError)noErr;
  174.     
  175.     if (filename[0]==0)
  176.         return paramErr;
  177.     
  178.     err=ICCGetPrefHandle((*globals)->current_target,kICMapping,&junk_attr,&entries);
  179.     
  180.     if (err==noErr){
  181.         err=ICCMapEntriesFilename((*globals)->current_target,entries,filename,entry);
  182.         
  183.         DisposeHandle(entries);
  184.     }
  185.     
  186.     return err;
  187. }
  188.  
  189. pascal ICError ICCIMapTypeCreator(GlobalsHandle globals,OSType fType,OSType fCreator,StringPtr filename,
  190.         ICMapEntry* entry){
  191.     ICError err;
  192.     Handle entries;
  193.     ICAttr junk_attr;
  194.     
  195.     err=ICCGetPrefHandle((*globals)->current_target,kICMapping,&junk_attr,&entries);
  196.     
  197.     if (err==noErr){
  198.         err=ICCMapEntriesTypeCreator((*globals)->current_target,entries,fType,fCreator,filename,entry);
  199.         DisposeHandle(entries);
  200.     }
  201.     
  202.     return err;
  203. }
  204.  
  205. pascal ICError ICCIStop(GlobalsHandle globals){
  206.     return ICRStop(&((*globals)->inst));
  207. }
  208.  
  209. pascal ICError ICCIFindConfigFile(GlobalsHandle globals,short count,ICDirSpecArrayPtr folders){
  210.     return ICRFindConfigFile(&((*globals)->inst),count,folders);
  211. }
  212.  
  213. pascal ICError ICCIFindUserConfigFile(GlobalsHandle globals,ICDirSpec* where){
  214.     return ICRFindUserConfigFile(&((*globals)->inst),where);
  215. }
  216.  
  217. pascal ICError ICCIGeneralFindConfigFile(GlobalsHandle globals,Boolean search_prefs,Boolean can_create,short count,
  218.         ICDirSpecArrayPtr folders){
  219.     return ICRGeneralFindConfigFile(&((*globals)->inst),search_prefs,can_create,count,folders);
  220. }
  221.  
  222. pascal ICError ICCIChooseConfig(GlobalsHandle globals){
  223.     return ICRChooseConfig(&((*globals)->inst));
  224. }
  225.  
  226. pascal ICError ICCIChooseNewConfig(GlobalsHandle globals){
  227.     return ICRChooseNewConfig(&((*globals)->inst));
  228. }
  229.  
  230. pascal ICError ICCIGetGonfigName(GlobalsHandle globals,Boolean longname,StringPtr name){
  231.     return ICRGetConfigName(&((*globals)->inst),longname,name);
  232. }
  233.  
  234. pascal ICError ICCIGetConfigReference(GlobalsHandle globals,ICConfigRefHandle ref){
  235.     return ICRGetConfigReference(&((*globals)->inst),ref);
  236. }
  237.  
  238. pascal ICError ICCISetConfigReference(GlobalsHandle globals,ICConfigRefHandle ref,long flags){
  239.     return ICRSetConfigReference(&((*globals)->inst),ref,flags);
  240. }
  241.  
  242. pascal ICError ICCISpecifyConfigFile(GlobalsHandle globals,FSSpecPtr config){
  243.     return ICRSpecifyConfigFile(&((*globals)->inst),config);
  244. }
  245.  
  246. pascal ICError ICCIGetSeed(GlobalsHandle globals,long* seed){
  247.     return ICRGetSeed(&((*globals)->inst),seed);
  248. }
  249.  
  250. pascal ICError ICCIGetPerm(GlobalsHandle globals,ICPerm* perm){
  251.     return ICRGetPerm(&((*globals)->inst),perm);
  252. }
  253.  
  254. pascal ICError ICCIBegin(GlobalsHandle globals,ICPerm perm){
  255.     return ICRBegin(&((*globals)->inst),perm);
  256. }
  257.  
  258. pascal ICError ICCICountPref(GlobalsHandle globals,long* count){
  259.     return ICRCountPref(&((*globals)->inst),count);
  260. }
  261.  
  262. pascal ICError ICCIGetIndPref(GlobalsHandle globals,long n,StringPtr key){
  263.     return ICRGetIndPref(&((*globals)->inst),n,key);
  264. }
  265.  
  266. pascal ICError ICCIDeletePref(GlobalsHandle globals,StringPtr key){
  267.     return ICRDeletePref(&((*globals)->inst),key);
  268. }
  269.  
  270. pascal ICError ICCIEnd(GlobalsHandle globals){
  271.     return ICREnd(&((*globals)->inst));
  272. }
  273.  
  274. pascal ICError ICCIEditPreferences(GlobalsHandle globals,StringPtr key){
  275.     return ICREditPreferences(&((*globals)->inst),key);
  276. }
  277.  
  278. pascal ICError ICCIParseURL(GlobalsHandle globals,StringPtr hint,Ptr data,long len,long* selStart,long* selEnd,
  279.         Handle url){
  280.     return ICRParseURL(&((*globals)->inst),hint,data,len,selStart,selEnd,url);
  281. }
  282.  
  283. pascal ICError ICCIMapEntriesFilename(GlobalsHandle globals,Handle entries,StringPtr filename,ICMapEntry* entry){
  284.     return ICRMapEntriesFilename(&((*globals)->inst),entries,filename,entry);
  285. }
  286.  
  287. pascal ICError ICCIMapEntriesTypeCreator(GlobalsHandle globals,Handle entries,OSType fType,OSType fCreator,
  288.         StringPtr filename,ICMapEntry* entry){
  289.     return ICRMapEntriesTypeCreator(&((*globals)->inst),entries,fType,fCreator,filename,entry);
  290. }
  291.  
  292. pascal ICError ICCICountMapEntries(GlobalsHandle globals,Handle entries,long* count){
  293.     return ICRCountMapEntries(&((*globals)->inst),entries,count);
  294. }
  295.  
  296. pascal ICError ICCIGetIndMapEntry(GlobalsHandle globals,Handle entries,long ndx,long* pos,ICMapEntry* entry){
  297.     return ICRGetIndMapEntry(&((*globals)->inst),entries,ndx,pos,entry);
  298. }
  299.  
  300. pascal ICError ICCIGetMapEntry(GlobalsHandle globals,Handle entries,long pos,ICMapEntry* entry){
  301.     return ICRGetMapEntry(&((*globals)->inst),entries,pos,entry);
  302. }
  303.  
  304. pascal ICError ICCISetMapEntry(GlobalsHandle globals,Handle entries,long pos,ICMapEntry* entry){
  305.     return ICRSetMapEntry(&((*globals)->inst),entries,pos,entry);
  306. }
  307.  
  308. pascal ICError ICCIDeleteMapEntry(GlobalsHandle globals,Handle entries,long pos){
  309.     return ICRDeleteMapEntry(&((*globals)->inst),entries,pos);
  310. }
  311.  
  312. pascal ICError ICCIAddMapEntry(GlobalsHandle globals,Handle entries,ICMapEntry* entry){
  313.     return ICRAddMapEntry(&((*globals)->inst),entries,entry);
  314. }
  315.  
  316. // ----- Component Entry Point -----
  317.  
  318. /*
  319.     "Component entry point.  It's pretty neat IMHO." - IC Pascal Programmers
  320.     
  321.     They were correct, their component entry routine was pretty neat, but I couldn't 
  322.     duplicate it exactly.  The original routine used procptrs with jumps to the appropriate
  323.     routines.  I redid it to use universal proc ptrs with the conditional macros to expand the calls.
  324. */
  325. pascal ComponentResult 
  326. #ifdef DEBUG_IC_COMPONENT
  327. InternetConfig
  328. #else /* Not DEBUG_IC_COMPONENT */
  329. main
  330. #endif /* DEBUG_IC_COMPONENT */
  331. (ComponentParameters* params,Handle storage){
  332.     ComponentFunctionUPP proc;
  333.     SignedByte s;
  334.     ComponentResult cres;
  335.     
  336. #if USESROUTINEDESCRIPTORS
  337. #ifndef DEBUG_IC_COMPONENT
  338.     __rsrcinit();
  339. #else
  340.     DebugStr("\pIC Component");
  341.     
  342. #endif
  343. #endif
  344.     
  345.     proc=(ComponentFunctionUPP)0;
  346.     
  347.     switch (params->what){
  348.         // Component Manager Interface
  349.         
  350.         case kComponentVersionSelect:
  351.             cres=internetConfigurationComponentInterfaceVersion;
  352.             break;
  353.         case kComponentCanDoSelect:
  354.             proc=BuildNewProc(ICCICanDo,uppICCanDoProcInfo);
  355.             break;
  356.         case kComponentOpenSelect:
  357.             proc=BuildNewProc(ICCIOpen,uppICOpenProcInfo);
  358.             break;
  359.         case kComponentCloseSelect:
  360.             proc=BuildNewProc(ICCIClose,uppICCloseProcInfo);
  361.             break;
  362.         case kComponentTargetSelect:
  363.             proc=BuildNewProc(ICCITarget,uppICTargetProcInfo);
  364.             break;
  365.         
  366.         // Component Interface
  367.         
  368.         case kICCStart:
  369.             proc=BuildNewProc(ICCIStart,uppICStartProcInfo);
  370.             break;
  371.         case kICCStop:
  372.             proc=BuildNewProc(ICCIStop,uppICStopProcInfo);
  373.             break;
  374.         case kICCFindConfigFile:
  375.             proc=BuildNewProc(ICCIFindConfigFile,uppICFindConfigFileProcInfo);
  376.             break;
  377.         case kICCFindUserConfigFile:
  378.             proc=BuildNewProc(ICCIFindUserConfigFile,uppICFindUserConfigFileProcInfo);
  379.             break;
  380.         case kICCGeneralFindConfigFile:
  381.             proc=BuildNewProc(ICCIGeneralFindConfigFile,uppICGeneralFindConfigFileProcInfo);
  382.             break;
  383.         case kICCGetConfigName:
  384.             proc=BuildNewProc(ICCIGetGonfigName,uppICGetConfigNameProcInfo);
  385.             break;
  386.         case kICCGetConfigReference:
  387.             proc=BuildNewProc(ICCIGetConfigReference,uppICGetConfigReferenceProcInfo);
  388.             break;
  389.         case kICCChooseConfig:
  390.             proc=BuildNewProc(ICCIChooseConfig,uppICChooseConfigProcInfo);
  391.             break;
  392.         case kICCChooseNewConfig:
  393.             proc=BuildNewProc(ICCIChooseNewConfig,uppICChooseNewConfigProcInfo);
  394.             break;
  395.         case kICCSetConfigReference:
  396.             proc=BuildNewProc(ICCISetConfigReference,uppICSetConfigReferenceProcInfo);
  397.             break;
  398.         case kICCSpecifyConfigFile:
  399.             proc=BuildNewProc(ICCISpecifyConfigFile,uppICSpecifyConfigFileProcInfo);
  400.             break;
  401.         case kICCGetSeed:
  402.             proc=BuildNewProc(ICCIGetSeed,uppICGetSeedProcInfo);
  403.             break;
  404.         case kICCGetPerm:
  405.             proc=BuildNewProc(ICCIGetPerm,uppICGetPermProcInfo);
  406.             break;
  407.         case kICCDefaultFileName:
  408.             proc=BuildNewProc(ICCIDefaultFileName,uppICDefaultFileNameProcInfo);
  409.             break;
  410.         case kICCBegin:
  411.             proc=BuildNewProc(ICCIBegin,uppICBeginProcInfo);
  412.             break;
  413.         case kICCGetPref:
  414.             proc=BuildNewProc(ICCIGetPref,uppICGetPrefProcInfo);
  415.             break;
  416.         case kICCSetPref:
  417.             proc=BuildNewProc(ICCISetPref,uppICSetPrefProcInfo);
  418.             break;
  419.         case kICCFindPrefHandle:
  420.             proc=BuildNewProc(ICCIFindPrefHandle,uppICFindPrefHandleProcInfo);
  421.             break;
  422.         case kICCGetPrefHandle:
  423.             proc=BuildNewProc(ICCIGetPrefHandle,uppICGetPrefHandleProcInfo);
  424.             break;
  425.         case kICCSetPrefHandle:
  426.             proc=BuildNewProc(ICCISetPrefHandle,uppICSetPrefHandleProcInfo);
  427.             break;
  428.         case kICCCountPref:
  429.             proc=BuildNewProc(ICCICountPref,uppICCountPrefProcInfo);
  430.             break;
  431.         case kICCGetIndPref:
  432.             proc=BuildNewProc(ICCIGetIndPref,uppICGetIndPrefProcInfo);
  433.             break;
  434.         case kICCDeletePref:
  435.             proc=BuildNewProc(ICCIDeletePref,uppICDeletePrefProcInfo);
  436.             break;
  437.         case kICCEnd:
  438.             proc=BuildNewProc(ICCIEnd,uppICEndProcInfo);
  439.             break;
  440.         case kICCEditPreferences:
  441.             proc=BuildNewProc(ICCIEditPreferences,uppICEditPreferencesProcInfo);
  442.             break;
  443.         case kICCParseURL:
  444.             proc=BuildNewProc(ICCIParseURL,uppICParseURLProcInfo);
  445.             break;
  446.         case kICCLaunchURL:
  447.             proc=BuildNewProc(ICCILaunchURL,uppICLaunchURLProcInfo);
  448.             break;
  449.         case kICCMapFilename:
  450.             proc=BuildNewProc(ICCIMapFilename,uppICMapFilenameProcInfo);
  451.             break;
  452.         case kICCMapTypeCreator:
  453.